home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / PROGRAMM / PASCAL / 0191.ZIP / HEXDUMP.PAS < prev    next >
Pascal/Delphi Source File  |  1984-06-22  |  2KB  |  114 lines

  1. PROGRAM hexdump;
  2.  
  3. {  This program will dump in hex and ascii form a file that the user    }
  4. {  specifies.  Written for Turbo Pascal by Jeff Firestone.  June 1984.  }
  5.  
  6. CONST
  7.   ArrSize = 128;
  8. VAR
  9.   argc, i, numin, tot, cfrom: INTEGER;
  10.   f : FILE;
  11.   Buffer : ARRAY [0..ArrSize] OF CHAR;
  12.  
  13.  
  14. PROCEDURE ohib(nib:CHAR);
  15. BEGIN
  16.   i:= ORD(nib);
  17.   i:= i AND 15;
  18.   IF (i >= 10) THEN
  19.     WRITE(CHR(i - 10 + ORD('A')))
  20.   ELSE
  21.     WRITE(i);
  22. END;
  23.  
  24. PROCEDURE ohb(byt:CHAR);
  25. VAR
  26.   TmpByt : CHAR;
  27. BEGIN
  28.   TmpByt:= CHR(ORD(byt) SHR 4);
  29.   ohib(TmpByt);
  30.   ohib(byt);
  31. END;
  32.  
  33. PROCEDURE ohw(wrd:INTEGER);
  34. VAR
  35.   TmpByt : CHAR;
  36. BEGIN
  37.   TmpByt:= CHR(HI(wrd));
  38.   ohb(TmpByt);
  39.   TmpByt:= CHR(LO(wrd));
  40.   ohb(TmpByt);
  41. END;
  42.  
  43.  
  44. PROCEDURE OpenFile;
  45. VAR Name : STRING[20];
  46. BEGIN
  47.   FILLCHAR(Buffer, SIZEOF(Buffer), 0);
  48.   WRITE('What file would you like to dump in hex form : ');
  49.   READLN(Name);
  50.   ASSIGN(f, Name);
  51.   RESET(f);
  52. END;
  53.  
  54.  
  55. PROCEDURE DoHexDump;
  56. BEGIN
  57.   tot:= 0;
  58.   REPEAT
  59. {  Read in a block of characters from the file  }
  60.  
  61.     BLOCKREAD(f, Buffer, 1);
  62.     cfrom:= 0;
  63.     WHILE cfrom < ArrSize-1 DO
  64.     BEGIN
  65.  
  66. {  Print the offset in HEX  }
  67.  
  68.       ohw(tot);
  69.       WRITE(' :');
  70.  
  71. {  Print the bytes in HEX  }
  72.  
  73.       FOR i:= 0 TO 7 DO
  74.       BEGIN
  75.         WRITE(' ');
  76.         ohb(buffer[cfrom]);
  77.         cfrom:= cfrom + 1;
  78.       END;
  79.  
  80.       WRITE(' ');
  81.  
  82.       FOR i:= 8 TO 15 DO
  83.       BEGIN
  84.         WRITE(' ');
  85.         ohb(buffer[cfrom]);
  86.         cfrom:= cfrom + 1;
  87.       END;
  88.  
  89.       cfrom:= cfrom - 16;
  90.       WRITE('  '+CHR(186)+' ');
  91.  
  92. {  Print the bytes in ASCII  }
  93.  
  94.       FOR i:= 0 TO 15 DO
  95.       BEGIN
  96.         IF ((Buffer[cfrom] < ' ') OR (ORD(Buffer[cfrom]) >= $7F)) THEN
  97.           Buffer[cfrom]:= '.';
  98.         WRITE(Buffer[cfrom]);
  99.         cfrom:= cfrom + 1;
  100.       END;
  101.       WRITELN(' '+CHR(186));
  102.       tot:= tot + 16;
  103.       IF (tot MOD 128) = 0 THEN WRITELN;
  104.     END;   {  While  }
  105.   UNTIL EOF(f);
  106.   CLOSE(f);
  107. END;
  108.  
  109.  
  110. BEGIN
  111.   OpenFile;
  112.   DoHexDump;
  113. END.
  114.